#include "headers/Fila.h"
#include <stddef.h>
#include <stdlib.h>

void CriarFila(Fila* F){
	F->inicio = F->final = NULL;
}

int isEmpty(Fila* F){
	if(F->inicio == NULL && F->final == NULL)
		return 1;
	else
		return 0;
}


int Fila_Inserir(Fila* F, int posicaoLivre){
	Node* newNode;
	newNode = (Node*)malloc(sizeof(Node));

	if(newNode == NULL)
		return 0; //Erro ao alocar novo n�.

	newNode->posicaoLivre = posicaoLivre;
	newNode->prox = NULL;

	if(isEmpty(F))
		F->inicio = newNode; //Se a fila estiver vazia, o novo n� ser� o primeiro da fila
	else
		(F->final)->prox = newNode;

	F->final = newNode; //Sen�o, o ponteiro para o final da fila apontar� para o novo n�.
	return 1;
}

int Fila_Remover(Fila* F, int* posicaoLivre){
	Node* aux = malloc(sizeof(Node*));

	if(isEmpty(F)) return 0; //fila vazia

	if(F->inicio == F->final){ //Apenas um elemento na lista
		F->final = NULL;
		aux = F->inicio;
		F->inicio = (F->inicio)->prox;
	}else{
		//Fila_Primeiro(F, posicaoLivre);
		aux = F->inicio; //Pega primeiro n� da fila.
		F->inicio = (F->inicio)->prox; //O proximo n�, ser� o pr�ximo do primeiro (inicio).
	}



	*posicaoLivre = aux->posicaoLivre;
	free(aux);
	return 1;
}

int Fila_Primeiro(Fila* F, int* posicaoLivre){ //Retorna o primeiro elemento da fila.
	if(isEmpty(F))
		return 0;
	else
		*posicaoLivre = (F->inicio)->posicaoLivre;
	return 1;
}
